package com.probiz.estore.product.service;

import com.probiz.estore.common.model.product.SkuOption;
import com.probiz.estore.core.service.GenericManager;
import com.probiz.estore.product.model.SkuOptionFullyModel;

import java.util.List;
import java.util.Map;

/**
 * Manager interface for SkuOption, responsible for business processing, and communicate between web and persistence layer.
 */
public interface SkuOptionManager extends GenericManager<SkuOption> {
	public static Short DELETE_STATUS_TRUE = 1;//物理删除成功
	public static Short DELETE_STATUS_FALSE = 0;//删除不成功,因为有存在该商品类型的商品
    /**
     * 获取产品类型的所有SkuOption选项
     * 按ProductTypeSkuOption的sortOrder排序
     *
     * @return
     */
    public List<SkuOption> findSkuOptionsByProductType(Integer productTypeId);

    /**
     * 获取产品类型的所有激活的SkuOption选项
     * 按ProductTypeSkuOption的sortOrder排序
     *
     * @return
     */
    public List<SkuOption> findActiveSkuOptionsByProductType(Integer productTypeId);


    /**
     * 获取与产品类型没有关联的激活的SkuOption选项
     *
     * @param productTypeId
     * @return
     */
    public List<SkuOption> findActiveSkuOptionsExcludeRefProductType(Integer productTypeId);

    /**
     * 根据SKU选项编码查找相应的SKU选项
     *
     * @param skuOptionCode
     * @return
     */
    public SkuOption getSkuOptionByCode(String skuOptionCode);


    /**
     * 完全保存规格
     *
     * @param skuOptionFullyMode 规格fullyModel
     * @return 返回参数
     */
    public Map<String, Object> saveFully(SkuOptionFullyModel skuOptionFullyMode);
    
    
    /**
     * 完全删除商品规格
     * @param product
     * @return  
     * DELETE_STATUS_TRUE 物理删除成功
     * DELETE_STATUS_FALSE 删除不成功,因为有存在关联该商品规格的商品
     * 
     */
    public short deleteFully(Integer skuOptionId);
    
    /**
     * 获取与商品类型关联的已开启快速搜索的规格个数
     * @param productTypeId
     * @return
     */
    public Long getNumOfQuickSearchOptionsByProductTypeId(Integer productTypeId);
    /**
     * 获得与商品类型关联的已开启快速搜索的规格列表
     * @param productTypeId 商品类型id
     * @return 列表
     */
    public List<SkuOption> getQuickSearchSkuOptionsByProductTypeId(Integer productTypeId);
    
    /**
     * 获取商品类型的关联规格值被货品所引用的次数
     * @param productType
     * @param skuOptionId
     * @return
     */
    public Long getSizeOfProductSkuOptionValueByProductTypeAndSkuOption(Integer productTypeId,Integer skuOptionId);
}
